package com.qf.login.controller;

import com.qf.login.entity.User;
import com.qf.login.service.TokenService;
import com.qf.login.service.UserService;
import com.qf.login.service.impl.JwtTokenServiceImpl;
import com.qf.login.vo.RegistVo;
import com.qf.utils.TokenUtils;
import com.qf.vo.ResultVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;

@RestController
@Slf4j  // 打印日志的注解
//@RequestMapping("/login")  // 所有接口的公共路径
public class LoginController {

    @Autowired
    private UserService userService;

    @Autowired
    @Qualifier("jwtTokenServiceImpl")
    private TokenService tokenService;

    @PostMapping("/regist")
    public ResultVo regist(@RequestBody RegistVo registVo){

        log.debug("注册接口接收参数，registVo={}",registVo);

        // 参校验
        if (registVo.getUsername()==null || registVo.getPwd()==null){
            return new ResultVo(-1, "用户名或密码为空了", null);
        }

        // 注册逻辑的实现
        userService.regist(registVo);

        // 返回注册成功的vo
        return new ResultVo(1, "ok", null);

    }


//    @RequestMapping("/login")  // 这个接口可以被get，post，put，delete各种方式访问
    @GetMapping("/login")   // 这个接口只能接收 get请求，如果发送的是post请求，会返回错误
    public ResultVo login(String username,String password){
        //1. 打印日志
        log.debug("登录接口的请求参数为username={},password={}",username,password);

        //2. 参数校验
        if (username==null || password==null){
            ResultVo resultVo = new ResultVo();
            resultVo.setCode(-1);
            resultVo.setMsg("用户名或密码为空了，请检查");
            return resultVo;
        }

        if (username.length()<5){
            return new ResultVo(-1, "用户名的长度小于5了", null);
        }

        if (password.length()<6){
            return new ResultVo(-1, "密码的长度小于6了", null);
        }

        //3. 比对用户名和密码
        User dbuser = userService.login(username, password);

        if (dbuser!=null){ // 登录成功了

            ResultVo resultVo = new ResultVo();

            resultVo.setCode(1);
            resultVo.setMsg("ok");
            HashMap<String, Object> data = new HashMap<>();

            // 生成JWT
//            String token = TokenUtils.createToken(username, 120);
            String token = tokenService.createToken(username, 120);
            data.put("token",token);
            data.put("user",dbuser);
            resultVo.setData(data);

            return resultVo;

        }else {
            return new ResultVo(-1, "用户名或者密码错误", null);
        }

    }

}
